# -*- coding: utf-8 -*-
# time: 2025/4/9 14:01
# file: his01.py
# author: hanson
"""
LangChain通过Memory工具类为Agent和Chain提供了记忆功能，让智能应用能够记住前一次的交互，比如在聊天环境中这一点尤为重要。

Chat Message History（聊天消息历史）
最常见的一种对话内容中的Memory类，这就好比是在你的乐高角色之间建立了一个记忆网络，使它们能够记住过去的对话，
这样每次交流都能在之前的基础上继续，使得智能积木人能够在每次对话中保持连贯性。
案例：
结合LLM链使用
"""
from langchain.chains.llm import LLMChain
from langchain_core.messages import HumanMessage, AIMessage
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_ollama import ChatOllama

# 1. 创建带历史记录的提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个专业助手"),
    MessagesPlaceholder(variable_name="history"),
    ("human", "{input}")
])
# 2. 准备消息历史
history = ChatMessageHistory()
history.add_user_message("我喜欢Python")
history.add_ai_message("Python是个很棒的语言！")

# 3. 创建链
llm = ChatOllama(model="qwen2.5:1.5b")
chain = LLMChain(llm=llm, prompt=prompt)

# 4. 带历史记录的调用
response = chain.invoke({
    "input": "为什么Python适合AI开发？",
    "history": history.messages
})
print(response["text"])
# 5. 将新消息加入历史
history.add_user_message("为什么Python适合AI开发？")
history.add_ai_message(response["text"])